package com.dong.HashMap.arithemtic;
/*
题目：
    给定两个字符串s和t编写一个函数来判断t是否是s的字母异位词。
    注意若s和t中每个字符出现的次数都相同，则称s和t互为字母异位词。

解题思路；
    t是s的异位词等价于两个字符串中字符出现的种类和次数均相等。
    由于字符串只包含26个小写字母，因此我们可以维护一个长度为26的频次数组，
    先遍历记录字符串s中字符出现的频次，然后遍历字符串t，减去{table}中对应的频次，
    如果出现{table}[i]<0，则说明t包含一个不在s中的额外字符，返回false即可。
 */

public class Demo1 {
    public static void main(String[] args) {
        String s = "anagram";
        String t = "nagaram";
        boolean anagram = isAnagram(s, t);
        System.out.println(anagram);
    }

    public static boolean isAnagram(String s, String t) {
      if (s.length()!=t.length()){
          return false;
      }
      int[] Hash_Map = new int[26];
        for (int i = 0; i < s.length(); i++) {
            //字符相减实际是它们的Ascall码相减:例'b'-'a'=1,Hash_Map[1]++ = 1,代表b字符出现一次
            Hash_Map[s.charAt(i) - 'a']++;

        }
        for (int j = 0; j < t.length(); j++) {
            Hash_Map[t.charAt(j)-'a']--;
            //只要数组里面有一个字母被减为负了
            if (Hash_Map[t.charAt(j)-'a']<0){
                return false;
            }
        }
        return true;

    }

}
